package com.wmh.baseservice.common.utils;

import com.wmh.baseservice.common.config.KeyConfig;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

import java.util.UUID;

/**
 * @author xy
 * shiro加密解密工具类
 * @Date 2021-10-28 下午16:52
 */
public class ShiroMd5Util {
    /**
     * 生成32的随机盐值
     */
    public static String createSalt() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * 加盐加密
     *
     * @param srcPwd    原始密码
     * @param saltValue 盐值
     */
    public static String salt(Object srcPwd, String saltValue) {
        return new SimpleHash("MD5", srcPwd, saltValue, 1024).toString();
    }

    /**
     * 密码校验
     *
     * @param encodePwd 加密后的密码
     * @param rawPwd    原密码
     * @param salt      密码盐值
     */
    public static Boolean decodePwd(String encodePwd, String rawPwd, String salt) {
        ByteSource saltSource = ByteSource.Util.bytes(salt);
        String saltPassword = ShiroMd5Util.salt(rawPwd, saltSource.toString());
        return encodePwd.equals(saltPassword);
    }

    /**
     * 生成加密后的密码
     *
     * @param password 密码
     * @param salt     盐值
     */
    public static String encodePwd(String password, String salt) {
        return ShiroMd5Util.salt(password, ByteSource.Util.bytes(salt).toString());
    }


    public static void main(String[] args) {
        String salt = createSalt();
        System.out.println(salt);
        String s = encodePwd("123123" + KeyConfig.SHIRO_SALE, salt);
        System.out.println(s);
        System.out.println(decodePwd(s, "123123"+KeyConfig.SHIRO_SALE, salt));

    }
}
